iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
1
AI & Data

[BI工具] 以Redash為資料視覺化方案之選擇與實踐系列 第 12

[Redash] Parameter 搜尋條件GUI功能

  • 分享至 

  • xImage
  •  

如果希望你的 query 可以有不用修改 SQL 而更改一些條件來達到不同的搜尋結果,
Redash 有提供 Parameter 的功能讓非技術人員也能很輕易改變自己的搜尋條件

這邊我們用 relational MySQL Database 的 World Dataset 來做範例,
https://relational.fit.cvut.cz/dataset/CCS

在 BI 系統中最常出現的維度就是時間,在此資料集中,日期總共有四個結果:

  • 2012-08-23
  • 2012-08-24
  • 2012-08-25
  • 2012-08-26

如果以往我們想要只 query 出日期為 2012-08-24 的結果,我們 SQL 會這樣寫:

SELECT * FROM ccs.transactions_1k 
WHERE `Date` = '2012-08-24'

而如果使用 Parameter 就是把 「2012-08-24」這段取代成 「{{ 參數名稱 }}
注意:如果原來的搜尋條件是字串,請務必要把字串的單雙引號保留下來
(也可以用「{{ }}」功能圖示來達到同樣效果)

在此例中我們讓參數名稱為 p_date

SELECT * FROM ccs.transactions_1k 
WHERE `Date` = '{{ p_date }}'

預設參數在圖表上顯示的會是 SQL 中的參數名稱,
而通常我們在寫 SQL 很常會用英文命名方式,
Redash 也可對此設定,讓顯示在圖表上的可以修改 (設定圖示>Title)

https://ithelp.ithome.com.tw/upload/images/20181020/20111638pzoAyQmLC0.png

注意:更改搜尋內容要記得按下 Execute 才會更新 query 的結果,
就如同直接改 SQL 一樣也是要按下同樣功能

Parameter 預設的 Type 是 Text,也就是我們在搜尋的時候,可以隨意輸入,
但伴隨而來的缺點就是,Parameter 是完全比對,
所以如果輸入錯誤就會 query 不出結果。
eg. 輸入 「2012/08/24」而非真正的值「2012-08-24」
這種時候就可以調整 Type 到一些常用的屬性,避免人為可能造成的輸入錯誤。

我們的搜尋條件是年月日格式的日期,Type 可以選擇 Date ,
就會有日曆可以方便選擇(還有可以直接選今天的時間),也能直接輸入日期文字來搜尋

注意:如果是只有年月日的格式,但 Type 卻選擇 Date and Time
而 Time 的資料又不是 00:00:00 這樣會無搜尋結果

https://ithelp.ithome.com.tw/upload/images/20181020/20111638wMRX2PcvMm.png

但其實就算用了 Date 的屬性,還是有可能發生選了一個不在資料集的日期,
eg. 選擇 Today,但現在都已經是 2018 年,資料集根本沒有現在的資料
此時 Type 就可以用 Dropdown List 來把可能的選擇以空行分隔輸入,
來以下拉式選單限制搜尋的條件:

https://ithelp.ithome.com.tw/upload/images/20181020/20111638GDiTvm5i2w.png

不過如果選項一多,一個個選項還要手動輸入總覺得不太方便,
在 Redash 之中,很多功能可以建立在已經建好的 query 上,
這邊我們可以另建一個 query 儲存起來

https://ithelp.ithome.com.tw/upload/images/20181020/20111638ZWG5T1plLM.png

然後在原需要此條件清單當成 Parameter 的 query,
在 Type 選擇 Query Based Dropdown List,然後以剛才建立的清單 query 名稱搜尋,
就可以以其結果當成搜尋條件的下拉式選單。

https://ithelp.ithome.com.tw/upload/images/20181020/20111638eoLk7uvXqR.png

注意:Redash 搜尋常是用名稱,而不是 Unique ID 之類的,
所以命名不要重複,而且要易懂,不然重複使用query一多的時候會很辛苦


使用案例

在公司裡面,當非技術人員想要限制條件
eg. 訂單類別(團體、機票、旅館...)、日期、價格區間...
使用 Parameter 就可以讓他們自行調整而不需要再找工程師幫忙

另外有時他們會想要看到所有結果,
但同時也會想要能有經過 Parameter 條件的結果
這個時候我會用比較 tricky 一點的 SQL 語法來做到

使用 Dropdown List

在 Redash 中使用兩個名稱一樣的 Parameter 只會出現一個搜尋框

SELECT * FROM ccs.transactions_1k 
WHERE ('{{p_date}}'='不限' or `Date` = '{{ p_date }}' )

https://ithelp.ithome.com.tw/upload/images/20181020/20111638bE9iTa9YGq.png

使用 Query Based Dropdown List

因為如果是使用 SQL 的 query 結果,同時又想要有一些自定義的內容,
純用 SQL 語法是達不到的,這時我會多使用一個 Parameter:

SELECT * FROM ccs.transactions_1k 
WHERE ('{{limit}}'='不限' or `Date` = '{{ p_date }}' )

https://ithelp.ithome.com.tw/upload/images/20181020/20111638rO5RxwaprN.png

ps. 文章同步發表於 Medium


上一篇
[Redash] 相見恨晚的 Pivot Table
下一篇
[Redash] Dashboard & Parameter
系列文
[BI工具] 以Redash為資料視覺化方案之選擇與實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
minhsiang
iT邦新手 5 級 ‧ 2018-11-07 11:50:30

想請問:如果query的條件是date range,那要如做寫query語法?!

SELECT * FROM ccs.transactions_1k 
WHERE `Date` between ? and ?
minhsiang iT邦新手 5 級 ‧ 2018-11-07 11:58:15 檢舉
SELECT *
FROM ccs.transactions_1k
WHERE `Date` BETWEEN '{{p_date.start}}' AND '{{p_date.end}}'

自問自答!

我要留言

立即登入留言